package com.iflytek.sbd.demo.jihe.collection.queue;

import java.util.ArrayList;
import java.util.PriorityQueue;

/**
 * @program: sbd
 * @description: 测试优先队列
 * @author: 陈英俊
 * @create: 2022-02-10 09:57
 */
public class PriorityQueueDemo {


    public static void main(String[] args) {

        PriorityQueue<Integer> queue = new PriorityQueue<>();
        // 两者都不可以插入null,会抛出异常,add插入失败会抛出异常,offer会返回false
        queue.add(1);
        queue.offer(2);
        // 都是获取但不删除队首元素,element没获取到抛出异常,peek则返回null
        System.out.println(queue.element());
        System.out.println(queue.peek());
        // 两者都是获取并删除队首元素
        System.out.println(queue.remove());
        System.out.println(queue.poll());


        // TODO: 2022/2/10 获取集合里面最大的几个值,或者最小的几个值
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            list.add(i);
        }

        PriorityQueue<Integer> qqq = new PriorityQueue<>();

        for (Integer value : list) {
            // 队列数据小于3,就添加数据
            if (qqq.size() < 3) {
                qqq.offer(value);
            } else if (qqq.size() == 3) {
                //查询队首数据
                Integer peek = qqq.peek();
                // 需要处理的数据大于 已存在的, 就将已存在的删除,然后将需要处理的数据存进去
                if (value > peek) {
                    qqq.poll();
                    qqq.offer(value);
                }
            }
        }
        System.out.println(qqq);

        PriorityQueue<Integer> aaa = new PriorityQueue<>();
        for (Integer value : list) {
            // 队列数据小于3,就添加数据
            if (aaa.size() < 3) {
                aaa.offer(value);
            } else if (aaa.size() == 3) {
                //查询队首数据
                Integer peek = aaa.peek();
                // 需要处理的数据大于 已存在的, 就将已存在的删除,然后将需要处理的数据存进去
                if (value < peek) {
                    aaa.poll();
                    aaa.offer(value);
                }
            }
        }
        System.out.println(aaa);


    }
}
